package com.zjsru.plan2023.oneday.oneDay202303;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: CookLee
 * @Date: 2023/4/13
 *
 * 出现最频繁的偶数元素
 *
 * 给你一个整数数组 nums ，返回出现最频繁的偶数元素。
 *
 * 如果存在多个满足条件的元素，只需要返回 最小 的一个。如果不存在这样的元素，返回 -1 。
 *
 * 输入：nums = [0,1,2,2,4,4,1]
 * 输出：2
 * 解释：
 * 数组中的偶数元素为 0、2 和 4 ，在这些元素中，2 和 4 出现次数最多。
 * 返回最小的那个，即返回 2 。
 *
 * 输入：nums = [4,4,4,9,2,4]
 * 输出：4
 * 解释：4 是出现最频繁的偶数元素。
 */
public class MostFrequentEven {
    
    /**
     * 出现最频繁的偶数元素
     * 哈希map
     * @param nums
     * @return int
     */
    public int mostFrequentEven(int[] nums) {
        Map<Integer, Integer> countMap = new HashMap<>();
        for (int num : nums) {
            if (this.helper(num)) {
                countMap.put(num, countMap.getOrDefault(num, 0) + 1);
            }
        }
        // 最频繁的偶数元素
        int mostFrequent = -1;
        // 最频繁元素出现的次数
        int maxCount = 0;
        for (int one : countMap.keySet()) {
            //获取当前key的计数
            Integer count = countMap.get(one);
            //如果有多个元素出现次数相同，则返回最小的一个
            if(count > maxCount || (count == maxCount && one < mostFrequent)){
                maxCount = count;
                mostFrequent = one;
            }
        }
        return mostFrequent;
    }
    
    /**
     * 奇偶判断助手
     *
     * @param num
     * @return boolean
     */
    private boolean helper(int num) {
        if (num == 0) {
            return true;
        }
        return num % 2 == 0;
    }
    
    public static void main(String[] args) {
        MostFrequentEven mostFrequentEven = new MostFrequentEven();
        int[] nums = new int[]{2,10000,10000,10000,2};
        System.out.println(mostFrequentEven.mostFrequentEven(nums));
    }
}
